﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml.Linq;
using Nova_DAL;
using System.Data.Common;
using Nova_Common;
using System.Text;
using System.Data;
using System.Drawing;
using Nova_BLL;
using Nova_Common.Extend;
using Nova_MOD;

public partial class Command_PowerCommand : System.Web.UI.Page
{
    string strSQL = "";
    DbHelper access = new DbHelper();
    DbCommand cmd = null;
    int iFlag = 0;
    int iResNo = 0;
    string strResMsg = "";

    DataSet ds = null;

    //用于双伸位前后货位的标记
    string FrontPos_ID = "";//用于标记上一行的货位号
    Color Samecolor = Color.AliceBlue;//两个切换的颜色
    Color Diffcolor = Color.LightSkyBlue;

    //20210427 NF项目 双伸位巷道集合 需要结合项目双伸位巷道修改
    string[] ExtensionLanelists = new string[] { "01" };

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            gv_Bind();
        }
        if (this.hidden.Value != "")
        {
            gv_Bind();
        }
        this.hidden.Value = "";
    }

    protected void gv_Bind()
    {
        try
        {   // 虽然写了存储过程，其实相当于直接查询指令表
            //cmd = access.GetStoredProcCommond("SP_GetCMDList_FSSC");
            //access.AddInParameter(cmd, "@SpaceTray", DbType.Int32, 0);
            //access.AddInParameter(cmd, "@TaskMode", DbType.Int32, 0);
            ////access.AddInParameter(cmd, "@WCode", DbType.String, Request.Cookies["WType"].Value);
            //access.AddInParameter(cmd, "@WCode", DbType.String, "FSSC");
            //gv.DataSource = access.ExecuteDataSet(cmd);
            //gv.DataBind();

            //xgw 添加  指令的对应值翻译    （3：离线整出 显示改为整出；1：整入）
            string sql = string.Format(@"select TaskID,
            case TaskMode when 1 then '整入'
              when 2 then '对接入库'
              when 3 then '整出'
              when 4 then '对接出库'
              when 5 then '离线补货'
              when 6 then '离线拣选'
              when 7 then '在线补货'
              when 8 then '在线拣选'
              when 9 then '移库'
              when 11 then '在线整出'
              when 12 then '在线盘点'
              when 13 then '空托盘入库'
              when 14 then '空盘离线整出'
              when 15 then '离线盘点'
              when 19 then '直行'
              when 20 then '特殊物料盘点、补货、拣选'
              else '其他' end as  TaskMode, 
            Tray_ID, PosS_ID, PosE_ID, 
            EquipmentS_ID , EquipmentE_ID ,
            case TaskStatus when 0 then '准备中' when 1  then '就绪中' when 2 then '正在执行' else '错误' end  as TaskStatus, 
          	CASE SyncWcs WHEN 0 THEN '未同步' WHEN 1 THEN '已同步' ELSE '错误' END AS SyncWcs,
	        CDT from TCommands order by CDT asc");

            this.cmd = this.access.GetSqlStringCommond(sql);
            ds = this.access.ExecuteDataSet(this.cmd);
            this.gv.DataSource = ds;
            this.gv.DataBind();

        }
        catch (Exception ex)
        {
            Response.Write(ex.ToString());
        }
    }

    protected void ibtnReset_Click(object sender, ImageClickEventArgs e)
    {
        labErrMsg.Text = "";
        gv_Bind();
    }

    //过账：修改托盘位置；从指令表中删除；出库的还要解盘；
    //--@XType过帐类型：1 完成，2 取消 3 盘点被整出
    //--@HType 0设备自动过帐,1RF手动过帐,2WMS手动过帐（自动化立体仓库中称强制过帐）
    //-- xgw add 双伸位需要校验所选指令能否过账（前后货位的逻辑关系处理）
    //xgw 20210427  删除 双伸位需要校验所选指令能否指令确认
    protected void ibtnPower_Click(object sender, ImageClickEventArgs e)
    {
        string StrWarning = "";
        try
        {
            //所有选择的指令能否做强制过账的校验
            //string result = "";
            //int check = PowerCheck(gv, out result);
            //if (check == 0)
            //{
            //    labErrMsg.Text = result + "请重新选择操作";
            //    return;
            //}


            for (int i = 0; i < gv.Rows.Count; i++)
            {
                CheckBox chkSelect = (CheckBox)gv.Rows[i].Cells[0].FindControl("chkSelect");
                if (chkSelect.Checked)
                {
                    cmd = access.GetStoredProcCommond("SP_Update_CMDs");
                    access.AddInParameter(cmd, "@TaskID", DbType.Int32, Convert.ToInt32(gv.Rows[i].Cells[2].Text.ToString()));
                    access.AddInParameter(cmd, "@XTYPE", DbType.Int32, 1);
                    access.AddInParameter(cmd, "@HType", DbType.Int32, 2);
                    access.AddInParameter(cmd, "@UserName", DbType.String, Request.Cookies["vNovaUserNo"].Value.ToString());
                    access.AddOutParameter(cmd, "@ResNO", DbType.Int32, 100);
                    access.AddOutParameter(cmd, "@RESMsg", DbType.String, 255);
                    access.ExecuteNonQuery(cmd);
                    iResNo = Convert.ToInt32(access.GetParameter(cmd, "@RESNO").Value.ToString());
                    strResMsg = access.GetParameter(cmd, "@RESMsg").Value.ToString();
                    if (iResNo < 0)
                    {
                        StrWarning += strResMsg + ";";
                    }
                }
            }

            labErrMsg.Text = StrWarning.IsEmpty() ? "指令强制过账成功!" : StrWarning;
            gv_Bind();
        }
        catch (Exception ex)
        {

        }

    }


    //强制撤销  删除指令表中指令
    //xgw add 双伸位需要校验所选指令能否指令撤销（前后货位的逻辑关系处理）
    //xgw 20210427  删除 双伸位需要校验所选指令能否指令撤销
    protected void ibtnCanCommand_Click(object sender, ImageClickEventArgs e)
    {
        //--@XType过帐类型：1 完成，2 取消 3 盘点被整出
        //--@HType 0设备自动过帐,1RF手动过帐,2WMS手动过帐（自动化立体仓库中称强制过帐）
        try
        {
            string StrWarning = "";
            for (int i = 0; i < gv.Rows.Count; i++)
            {
                CheckBox chkSelect = (CheckBox)gv.Rows[i].Cells[0].FindControl("chkSelect");
                if (chkSelect.Checked)
                {
                    cmd = access.GetStoredProcCommond("SP_Update_CMDs");
                    access.AddInParameter(cmd, "@TaskID", DbType.Int32, Convert.ToInt32(gv.Rows[i].Cells[2].Text.ToString()));
                    access.AddInParameter(cmd, "@XTYPE", DbType.Int32, 2);
                    access.AddInParameter(cmd, "@HType", DbType.Int32, 2);
                    access.AddInParameter(cmd, "@UserName", DbType.String, Request.Cookies["vNovaUserNo"].Value.ToString());
                    access.AddOutParameter(cmd, "@ResNO", DbType.Int32, 100);
                    access.AddOutParameter(cmd, "@ResMsg", DbType.String, 255);
                    access.ExecuteNonQuery(cmd);
                    iResNo = Convert.ToInt32(access.GetParameter(cmd, "@RESNO").Value.ToString());
                    strResMsg = access.GetParameter(cmd, "@ResMsg").Value.ToString();
                    if (iResNo < 0)
                    {
                        StrWarning += strResMsg + ";";
                    }
                }
            }

            labErrMsg.Text = StrWarning.IsEmpty() ? "撤销指令成功!" : StrWarning;
            gv_Bind();
        }
        catch (Exception ex)
        {

        }
    }



    //强制撤销  删除指令表中指令
    //xgw add 双伸位需要校验所选指令能否指令撤销（前后货位的逻辑关系处理）
    //xgw 20210427  删除 双伸位需要校验所选指令能否指令撤销
    //protected void ibtnCanCommand_Click(object sender, ImageClickEventArgs e)
    //{
    //    //--@XType过帐类型：1 完成，2 取消 3 盘点被整出
    //    //--@HType 0设备自动过帐,1RF手动过帐,2WMS手动过帐（自动化立体仓库中称强制过帐）
    //    string StrWarning = "";
    //    try
    //    {

    //        for (int i = 0; i < gv.Rows.Count; i++)
    //        {
    //            CheckBox chkSelect = (CheckBox)gv.Rows[i].Cells[0].FindControl("chkSelect");
    //            if (chkSelect.Checked)
    //            {
    //                // 删除指令，新增历史指令，更新货位状态
    //                long taskId = long.Parse(gv.Rows[i].Cells[2].Text.ToString());
    //                var cmdEntity = CmdBll.GetEntityByTaskId(taskId);
    //                if (!cmdEntity.IsEmpty())
    //                {
    //                    bool res = CmdHisBll.InsertEntity(cmdEntity, 2, 2);
    //                    if (res)
    //                    {
    //                        CmdBll.DeleteByTaskId(cmdEntity);
    //                        PositionBll.UpdateByPosId(cmdEntity.PosS_ID, 1);
    //                        StrWarning += "撤销指令成功!";
    //                    }
    //                }
    //            }
    //        }

    //        labErrMsg.Text = StrWarning;
    //        gv_Bind();
    //    }
    //    catch (Exception ex)
    //    {
    //        StrWarning += "删除指令异常!";
    //    }
    //}

    /// <summary>
    /// 此方法项目不用
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void ibtnALLout_Click(object sender, ImageClickEventArgs e)
    {
        try
        {
            for (int i = 0; i < gv.Rows.Count; i++)
            {
                CheckBox chkSelect = (CheckBox)gv.Rows[i].Cells[0].FindControl("chkSelect");
                if (chkSelect.Checked)
                {
                    cmd = access.GetStoredProcCommond("SP_Update_CMDs");
                    access.AddInParameter(cmd, "@TaskID", DbType.Int32, Convert.ToInt32(gv.Rows[i].Cells[2].Text.ToString()));
                    access.AddInParameter(cmd, "@XTYPE", DbType.Int32, 3);
                    access.AddInParameter(cmd, "@HType", DbType.Int32, 2);
                    access.AddInParameter(cmd, "@UserName", DbType.String, Request.Cookies["vNovaUserNo"].Value.ToString());
                    access.AddOutParameter(cmd, "@ResNO", DbType.Int32, 100);
                    access.AddOutParameter(cmd, "@ErrMsg", DbType.String, 255);
                    access.ExecuteNonQuery(cmd);
                    iResNo = Convert.ToInt32(access.GetParameter(cmd, "@RESNO").Value.ToString());
                    strResMsg = access.GetParameter(cmd, "@ErrMsg").Value.ToString();
                }
            }
            if (iResNo > 0)
            {
                labErrMsg.Text = "拣选被整出成功！";
                gv_Bind();
            }
            else
            {
                labErrMsg.Text = "拣选被整出失败！@";
                labErrMsg.Text += strResMsg;
            }
        }
        catch (Exception ex)
        {

        }
    }

    #region 强制过账、撤销的前后货位逻辑关系验证  以前的
    ///// <summary>
    ///// 强制过账检查：非入库、内侧货位的指令，需要检查前面货位状态
    /////               入库 、外侧货位指令，需要检查后面的货位状态不同核对
    /////               第二巷道核对，其他
    ///// </summary>
    ///// <param name="gv"></param>
    ///// <param name="result"></param>
    ///// <returns></returns>
    //private int PowerCheck(GridView gv, out string result)
    //{
    //    string strFrontPos_State = "";

    //    try
    //    {
    //        for (int i = 0; i < gv.Rows.Count; i++)
    //        {
    //            CheckBox chkSelect = (CheckBox)gv.Rows[i].Cells[0].FindControl("chkSelect");
    //            if (chkSelect.Checked)
    //            {
    //                string StartPos = gv.Rows[i].Cells[7].Text.ToString();//起点货位号
    //                if ((StartPos != "200000000000") && ((Convert.ToInt64(StartPos) / 100) % 2 == 0))// 非入库操作的后面货位
    //                {
    //                    long FrontPos_Id = ((Convert.ToInt64(StartPos) / 100) - 1) * 100;
    //                    int select = Selected(gv, FrontPos_Id.ToString());// 前面货位是否选择
    //                    if (select == 1) //前面货位选择
    //                    {
    //                        continue;
    //                    }

    //                    strSQL = "SELECT  * FROM TBase_Position WHERE Pos_ID = " + FrontPos_Id + " ";
    //                    cmd = access.GetSqlStringCommond(strSQL);
    //                    ds = access.ExecuteDataSet(cmd);
    //                    if (ds.Tables[0].Rows.Count > 0)
    //                    {

    //                        strFrontPos_State = ds.Tables[0].Rows[0]["Pos_State"].ToString();
    //                    }

    //                    if (strFrontPos_State == "" || strFrontPos_State == "1" || strFrontPos_State == "2" || strFrontPos_State == "3" || strFrontPos_State == "4" || strFrontPos_State == "6")
    //                    {
    //                        result = "货位：" + StartPos + "前面的货位状态为:" + strFrontPos_State + ",不允许此货位的指令强制过账!";

    //                        return 0;
    //                    }

    //                }
    //            }

    //        }
    //        result = "";
    //        return 1;

    //    }
    //    catch (Exception ex)
    //    {
    //        result = ex.ToString();
    //        return 0;
    //    }
    //}


    ///// <summary>
    /////  撤销操作检查：非入库、前面货位的指令，需要检查后面货位是否选择，没有选择检查后面货位状态！
    ///// </summary>
    ///// <param name="gv"></param>
    ///// <param name="result"></param>
    ///// <returns></returns>
    //private int CancelCheck(GridView gv, out string result)
    //{
    //    string strNextPos_State = "";

    //    try
    //    {
    //        for (int i = 0; i < gv.Rows.Count; i++)
    //        {
    //            CheckBox chkSelect = (CheckBox)gv.Rows[i].Cells[0].FindControl("chkSelect");
    //            if (chkSelect.Checked)
    //            {
    //                string StartPos = gv.Rows[i].Cells[7].Text.ToString();//起点货位号

    //                if ((StartPos != "200000000000") && ((Convert.ToInt64(StartPos) / 100) % 2 == 1))// 非入库操作的前面货位
    //                {
    //                    long NextPos_Id = ((Convert.ToInt64(StartPos) / 100) + 1) * 100;
    //                    int select = Selected(gv, NextPos_Id.ToString());// 后面货位是否选择
    //                    if (select == 1) //后面货位选择
    //                    {
    //                        continue;
    //                    }
    //                    //后面货位没有选择，核对后面货位的状态
    //                    strSQL = "SELECT  * FROM TBase_Position WHERE Pos_ID = " + NextPos_Id + " ";
    //                    cmd = access.GetSqlStringCommond(strSQL);
    //                    ds = access.ExecuteDataSet(cmd);
    //                    if (ds.Tables[0].Rows.Count > 0)
    //                    {

    //                        strNextPos_State = ds.Tables[0].Rows[0]["Pos_State"].ToString();
    //                    }
    //                    //"" 代表获取状态失败
    //                    if (strNextPos_State == "" || strNextPos_State == "3" || strNextPos_State == "4" || strNextPos_State == "6")
    //                    {
    //                        result = "货位：" + StartPos + "后面的货位状态为:" + strNextPos_State + ",不允许此货位的指令撤销操作!";
    //                        return 0;
    //                    }

    //                }
    //            }

    //        }
    //        result = "";
    //        return 1;

    //    }
    //    catch (Exception ex)
    //    {
    //        result = ex.ToString();
    //        return 0;
    //    }
    //}

    ///// <summary>
    ///// 起点货位号pos_id是否选择
    ///// </summary>
    ///// <param name="gv"></param>
    ///// <param name="pos_id"></param>
    ///// <returns>1:选选择；0：没有选择</returns>
    //private int Selected(GridView gv, string pos_id)
    //{
    //    try
    //    {
    //        for (int i = 0; i < gv.Rows.Count; i++)
    //        {
    //            CheckBox chkSelect = (CheckBox)gv.Rows[i].Cells[0].FindControl("chkSelect");
    //            if (chkSelect.Checked)
    //            {
    //                if (gv.Rows[i].Cells[7].Text.Trim().ToString() == pos_id)
    //                {
    //                    return 1;
    //                }
    //            }
    //        }
    //        return 0;
    //    }
    //    catch (Exception ex)
    //    {
    //        return 0;
    //    }
    //}

    #endregion

    #region 强制过账、撤销的前后货位逻辑关系验证  金锋馥项目使用
    /// <summary>
    /// 强制过账检查：如果是选择项
    ///               入库类型  终点货位是第二巷道 外侧货位（奇数层） 核对指令列表是否存相邻的内侧货位 没有选择的情况 存在则核对顺序失败
    ///               如果是非入库类型  终点货位是第二巷道 内侧货位（偶数层） 核对指令列表是否存相邻的外侧货位 没有选择的情况 存在则核对顺序失败
    /// </summary>
    /// <param name="gv"></param>
    /// <param name="result"></param>
    /// <returns>1:顺序核对正确 0：核对失败</returns>
    private int PowerCheck(GridView gv, out string result)
    {

        int TaskType; //1:入库 2：非入库
        try
        {
            for (int i = 0; i < gv.Rows.Count; i++)
            {
                CheckBox chkSelect = (CheckBox)gv.Rows[i].Cells[0].FindControl("chkSelect");
                if (chkSelect.Checked)
                {

                    string StartPos = gv.Rows[i].Cells[6].Text.ToString();//起点货位号
                    string EndPos = gv.Rows[i].Cells[7].Text.ToString();//终点货位号
                    if (StartPos == "200000000000" && EndPos != "200000000000")
                    {
                        TaskType = 1;

                    }
                    else
                    {
                        TaskType = 2;
                    }

                    //如果是入库类型  终点货位是第二巷道 外侧货位（奇数层） 核对指令列表是否存相邻的内侧货位 没有选择的情况 存在则核对顺序失败
                    if ((TaskType == 1) && (EndPos.Substring(2, 2) == "02") && ((Convert.ToInt64(EndPos) / 100) % 2 == 1))
                    {
                        //相邻的内侧货位
                        string InsidePos_Id = (((Convert.ToInt64(EndPos) / 100) + 1) * 100).ToString();
                        // 指令列表中存在但没有选择算法
                        if (ExsitNoSelected(gv, 1, InsidePos_Id) == 1)
                        {
                            result = "货位：" + EndPos + "里面的货位:" + InsidePos_Id + ",存在指令列表中但没有被选择，请按照正确的顺序过账!";
                            return 0;
                        }
                    }

                    //如果是非入库类型  终点货位是第二巷道 内侧货位（偶数层） 核对指令列表是否存相邻的外侧货位 没有选择的情况 存在则核对顺序失败
                    if ((TaskType == 2) && (StartPos.Substring(2, 2) == "02") && ((Convert.ToInt64(StartPos) / 100) % 2 == 0))
                    {
                        //相邻的外侧货位
                        string OutsidePos_Id = (((Convert.ToInt64(StartPos) / 100) - 1) * 100).ToString();
                        // 指令列表中存在但没有选择算法
                        if (ExsitNoSelected(gv, 2, OutsidePos_Id) == 1)
                        {
                            result = "货位：" + StartPos + "外面的货位:" + OutsidePos_Id + ",存在指令列表中但没有被选择，请按照正确的顺序过账!";
                            return 0;
                        }
                    }



                }

            }
            result = "";
            return 1;

        }
        catch (Exception ex)
        {
            result = ex.ToString();
            return 0;
        }
    }


    /// <summary>
    ///  任务撤销检查：如果是选择项
    ///               入库类型  终点货位是第二巷道 内侧货位（偶数层） 核对指令列表是否存相邻的外侧货位 没有选择的情况 存在则核对顺序失败
    ///               如果是非入库类型  开始货位是第二巷道 外侧货位（奇数层） 核对指令列表是否存相邻的内侧货位 没有选择的情况 存在则核对顺序失败
    /// </summary>
    /// <param name="gv"></param>
    /// <param name="result"></param>
    /// <returns>1:顺序核对正确 0：核对失败</returns>
    private int CancelCheck(GridView gv, out string result)
    {
        int TaskType; //1:入库 2：非入库
        try
        {
            for (int i = 0; i < gv.Rows.Count; i++)
            {
                CheckBox chkSelect = (CheckBox)gv.Rows[i].Cells[0].FindControl("chkSelect");
                if (chkSelect.Checked)
                {

                    string StartPos = gv.Rows[i].Cells[6].Text.ToString();//起点货位号
                    string EndPos = gv.Rows[i].Cells[7].Text.ToString();//终点货位号
                    if (StartPos == "200000000000" && EndPos != "200000000000")
                    {
                        TaskType = 1;

                    }
                    else
                    {
                        TaskType = 2;
                    }

                    //如果是入库类型  终点货位是第二巷道 内侧货位（偶数层） 核对指令列表是否存相邻的外侧货位 没有选择的情况 存在则核对顺序失败
                    if ((TaskType == 1) && (EndPos.Substring(2, 2) == "02") && ((Convert.ToInt64(EndPos) / 100) % 2 == 0))
                    {
                        //相邻的外侧货位
                        string OutsidePos_Id = (((Convert.ToInt64(EndPos) / 100) - 1) * 100).ToString();
                        // 指令列表中存在但没有选择算法
                        if (ExsitNoSelected(gv, 1, OutsidePos_Id) == 1)
                        {
                            result = "货位：" + EndPos + "外侧的货位:" + OutsidePos_Id + ",存在指令列表中但没有被选择，请按照正确的顺序撤销!";
                            return 0;
                        }
                    }

                    //如果是非入库类型  开始货位是第二巷道 外侧货位（奇数层） 核对指令列表是否存相邻的内侧货位 没有选择的情况 存在则核对顺序失败
                    if ((TaskType == 2) && (StartPos.Substring(2, 2) == "02") && ((Convert.ToInt64(StartPos) / 100) % 2 == 1))
                    {
                        //相邻的内侧货位
                        string InsidePos_Id = (((Convert.ToInt64(StartPos) / 100) + 1) * 100).ToString();
                        // 指令列表中存在但没有选择算法
                        if (ExsitNoSelected(gv, 2, InsidePos_Id) == 1)
                        {
                            result = "货位：" + StartPos + "内侧的货位:" + InsidePos_Id + ",存在指令列表中但没有被选择，请按照正确的顺序撤销!";
                            return 0;
                        }
                    }



                }

            }
            result = "";
            return 1;

        }
        catch (Exception ex)
        {
            result = ex.ToString();
            return 0;
        }
    }

    /// <summary>
    /// 入出库任务类型下 货位号pos_id 是否存在列表中没有选择
    /// </summary>
    /// <param name="gv"></param>
    /// <param name="TaskType"></param>
    /// <param name="pos_id"></param>
    /// <returns>1: 存在但没有选择   0：</returns>
    private int ExsitNoSelected(GridView gv, int TaskType, string pos_id)
    {
        try
        {
            for (int i = 0; i < gv.Rows.Count; i++)
            {

                CheckBox chkSelect = (CheckBox)gv.Rows[i].Cells[0].FindControl("chkSelect");
                if (!chkSelect.Checked)
                {
                    if (TaskType == 1)
                    {
                        // 入库核对终点货位
                        if (gv.Rows[i].Cells[7].Text.Trim().ToString() == pos_id)
                        {
                            return 1;
                        }
                    }
                    else
                    {
                        //非入库 核对 开启货位
                        if (gv.Rows[i].Cells[6].Text.Trim().ToString() == pos_id)
                        {
                            return 1;
                        }
                    }

                }
            }
            return 0;
        }
        catch (Exception ex)
        {
            return 0;
        }
    }



    #endregion

    /// <summary>
    /// 双伸位前后货位关系 的显示同意颜色区分  
    /// 优化：
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        try
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                string Pos_Id = e.Row.Cells[6].Text.ToString();  //指令开始货位

                //第二巷道（双伸位） 后面货位（偶数层） 与前一行数据货位为前后关系  显示同样颜色， 否则显示不同颜色
                if ((Convert.ToInt32(Pos_Id.Substring(8, 2)) % 2) == 0 && ExtensionLanelists.Contains(Pos_Id.Substring(2, 2)) && ((Convert.ToInt64(Pos_Id.Substring(0, 10)) - 1) * 100)._ToString() == FrontPos_ID)
                {
                    // e.Row.BackColor = Samecolor;

                }
                else
                {
                    // e.Row.BackColor = Diffcolor;

                    // Color Middlecolor = Samecolor;
                    // Samecolor = Diffcolor;
                    // Diffcolor = Middlecolor;

                }

                FrontPos_ID = Pos_Id;
            }
        }
        catch (Exception ex)
        {
            Response.Write(ex.ToString());


        }
    }
}
